#ifndef __Collections_IList_H__
#define __Collections_IList_H__

///<summary>
/// IList<T>
///</summary>
//+ requires: Collections_IEnumerator(T)
//+ requires: Collections_IEnumerable(T)
//+ requires: Collections_ICollection(T)
#define Collections_IList(T) bindT(Collections_IList,T)
#define Declare_Collections_IList(T, Ti) \
	private enum { \
		_Collections_IList_##T##VIndex_IndexOf, \
		_Collections_IList_##T##VIndex_Insert, \
		_Collections_IList_##T##VIndex_RemoveAt, \
		_Collections_IList_##T##VIndex_getIndex, \
		_Collections_IList_##T##VIndex_setIndex, \
		_Collections_IList_##T##VIndexNext, \
	}; \
	public interfaceT(Collections_IList,T,classInterface2(Collections_ICollection(T), Collections_IEnumerable(T)), \
		virtualT(Collections_IList,T,int_,IndexOf, Ti item); \
		virtualT(Collections_IList,T,void,Insert, int_ index, Ti item); \
		virtualT(Collections_IList,T,void,RemoveAt, int_ index); \
		getIndexVirtualT(Collections_IList,T,Ti, int_ index); \
		setIndexVirtualT(Collections_IList,T,Ti, int_ index); \
	);
#define Implement_Collections_IList(T, Ti) \
	Implement_TypeTI(Collections_IList,T,)

#endif /* __Collections_IList_H__ */